﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace FrbaCommerce.Comprar_Ofertar
{
    public partial class frm_editarPublicacion : Form
    {
        private DataRow publicacionOriginal;

        public frm_editarPublicacion(DataGridViewRow publicacion)
        {
            InitializeComponent();
            this.publicacionOriginal = (publicacion.DataBoundItem as DataRowView).Row;
        }

        private void frm_editarPublicacion_Load(object sender, EventArgs e)
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.SP_TRAER_TIPO_PUBLICACION";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            DataTable dt_tiposPublicacion = baseDeDatos.consulta(sqlCommand);
            cmb_tipoPublicacion.DataSource = dt_tiposPublicacion;
            cmb_tipoPublicacion.DisplayMember = "DESCRIPCION";
            cmb_tipoPublicacion.ValueMember = "ID_TIPO_PUBLICACION";

            sqlCommand.CommandText = "LOS_GDDES.SP_TRAER_RUBROS";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            DataTable dt_rubros = baseDeDatos.consulta(sqlCommand);
            clb_rubros.DataSource = dt_rubros;
            clb_rubros.DisplayMember = "DESCRIPCION";
            clb_rubros.ValueMember = "ID_RUBRO";

            sqlCommand.CommandText = "LOS_GDDES.SP_TRAER_VISIBILIDADES";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            DataTable dt_visibilidades = baseDeDatos.consulta(sqlCommand);
            cmb_visibPublicacion.DataSource = dt_visibilidades;
            cmb_visibPublicacion.DisplayMember = "DESCRIPCION";
            cmb_visibPublicacion.ValueMember = "ID_VISIBILIDAD";

            sqlCommand.CommandText = "LOS_GDDES.SP_TRAER_ESTADOS";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            DataTable dt_estados = baseDeDatos.consulta(sqlCommand);
            cmb_estadoPublicacion.DataSource = dt_estados;
            cmb_estadoPublicacion.DisplayMember = "DESCRIPCION";
            cmb_estadoPublicacion.ValueMember = "ID_ESTADO";

            //---Cargar valores originales---//
            txt_descripPublicacion.Text = publicacionOriginal.Field<string>("DESCRIPCION");
            txt_precioPublicacion.Text = Convert.ToString(publicacionOriginal.Field<Decimal>("PRECIO"));
            nud_stock.Value = publicacionOriginal.Field<Decimal>("STOCK");            
            cmb_tipoPublicacion.SelectedValue = publicacionOriginal.Field<Decimal>("ID_TIPO_PUBLICACION");
            cmb_visibPublicacion.SelectedValue = publicacionOriginal.Field<Decimal>("ID_VISIBILIDAD");
            cmb_estadoPublicacion.SelectedValue = publicacionOriginal.Field<Decimal>("ID_ESTADO");
            if (publicacionOriginal.Field<Boolean>("PERMITE_PREGUNTAS"))
                rdb_si.Checked = true;
            else
                rdb_no.Checked = true;
            sqlCommand.CommandText = "LOS_GDDES.SP_TRAER_RUBROS_DE_PUBLICACION";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("@id_publicacion", publicacionOriginal.Field<Decimal>("ID_PUBLICACION"));
            DataTable dt_id_rubros = baseDeDatos.consulta(sqlCommand);
            foreach (DataRow r_id_rubro in dt_id_rubros.Rows)
            {
                for (int i = 0; i < dt_rubros.Rows.Count; i++)
                {
                    if (dt_rubros.Rows[i].Field<Decimal>("ID_RUBRO") == r_id_rubro.Field<Decimal>("ID_RUBRO"))
                        clb_rubros.SetItemChecked(i, true);
                }
            }
            //---Cargar valores originales---//

            this.restringirCampos();
        }

        private void restringirCampos()
        {
            if (publicacionOriginal.Field<Decimal>("ID_ESTADO") == 1)
            {
                //COMPRA INMEDIATA
                cmb_tipoPublicacion.Enabled = false;
                txt_precioPublicacion.Enabled = false;
                nud_stock.Minimum = publicacionOriginal.Field<Decimal>("STOCK");
                clb_rubros.Enabled = false;
                cmb_visibPublicacion.Enabled = false;
                BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.CommandText = "SELECT ID_ESTADO,DESCRIPCION FROM LOS_GDDES.ESTADOS " +
                                         "WHERE DESCRIPCION IN ('Activa','Pausada','Finalizada')";
                sqlCommand.CommandType = CommandType.Text;
                DataTable dt_estados = baseDeDatos.consulta(sqlCommand);
                cmb_estadoPublicacion.DataSource = dt_estados;
                cmb_estadoPublicacion.DisplayMember = "DESCRIPCION";
                cmb_estadoPublicacion.ValueMember = "ID_ESTADO";
                cmb_estadoPublicacion.SelectedValue = publicacionOriginal.Field<Decimal>("ID_ESTADO");
                rdb_si.Enabled = false;
                rdb_no.Enabled = false;
            }
            if (publicacionOriginal.Field<Decimal>("ID_ESTADO") == 4)
            {
                cmb_tipoPublicacion.Enabled = false;
                txt_descripPublicacion.Enabled = false;
                nud_stock.Enabled = false;
                txt_precioPublicacion.Enabled = false;
                clb_rubros.Enabled = false;
                cmb_visibPublicacion.Enabled = false;
                BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.CommandText = "SELECT ID_ESTADO,DESCRIPCION FROM LOS_GDDES.ESTADOS " +
                                         "WHERE DESCRIPCION IN ('Activa','Pausada','Finalizada')";
                sqlCommand.CommandType = CommandType.Text;
                DataTable dt_estados = baseDeDatos.consulta(sqlCommand);
                cmb_estadoPublicacion.DataSource = dt_estados;
                cmb_estadoPublicacion.DisplayMember = "DESCRIPCION";
                cmb_estadoPublicacion.ValueMember = "ID_ESTADO";
                cmb_estadoPublicacion.SelectedValue = publicacionOriginal.Field<Decimal>("ID_ESTADO");
                rdb_si.Enabled = false;
                rdb_no.Enabled = false;
            }
        }

        private void cmb_tipoPublicacion_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmb_tipoPublicacion.Text == "Subasta")
            {
                nud_stock.Enabled = false;
                nud_stock.Value = 1;
            }
            else
            {
                nud_stock.Enabled = true;
            }
        }

        private void btn_aceptar_Click(object sender, EventArgs e)
        {
            if ((txt_descripPublicacion.Text != "") & (txt_precioPublicacion.Text != ""))
            {
                if (clb_rubros.CheckedItems.Count != 0)
                {
                    int valido = validar_publicaciones_gratuitas();
                    if (valido == 1)
                    {
                        //---Modificar Publicacion---//
                        BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                        SqlCommand sqlCommand = new SqlCommand();
                        sqlCommand.CommandText = "LOS_GDDES.SP_MODIFICAR_PUBLICACION";
                        sqlCommand.CommandType = CommandType.StoredProcedure;
                        sqlCommand.Parameters.AddWithValue("@id_publicacion", publicacionOriginal.Field<Decimal>("ID_PUBLICACION"));
                        sqlCommand.Parameters.AddWithValue("@descripcion", txt_descripPublicacion.Text);
                        sqlCommand.Parameters.AddWithValue("@stock", nud_stock.Value);
                        if (publicacionOriginal.Field<Decimal>("ID_ESTADO") == 2) //BORRADA
                            sqlCommand.Parameters.AddWithValue("@fecha_inicio", Convert.ToDateTime(Properties.Settings.Default.FechaDelSistema));
                        sqlCommand.Parameters.AddWithValue("@precio", Convert.ToDecimal(txt_precioPublicacion.Text));
                        sqlCommand.Parameters.AddWithValue("@id_visibilidad", cmb_visibPublicacion.SelectedValue);
                        sqlCommand.Parameters.AddWithValue("@id_estado", cmb_estadoPublicacion.SelectedValue);
                        sqlCommand.Parameters.AddWithValue("@id_tipo_publicacion", cmb_tipoPublicacion.SelectedValue);
                        if (rdb_si.Checked)
                            sqlCommand.Parameters.AddWithValue("permite_preguntas", true);
                        if (rdb_no.Checked)
                            sqlCommand.Parameters.AddWithValue("permite_preguntas", false);
                        baseDeDatos.ejecuta(sqlCommand);
                        //---Modificar Publicacion---//

                        //---Eliminar Rubros---//
                        sqlCommand.CommandText = "LOS_GDDES.SP_ELIMINAR_RUBROS_X_PUBLIACION";
                        sqlCommand.CommandType = CommandType.StoredProcedure;
                        sqlCommand.Parameters.Clear();
                        sqlCommand.Parameters.AddWithValue("@id_publicacion", publicacionOriginal.Field<Decimal>("ID_PUBLICACION"));
                        baseDeDatos.ejecuta(sqlCommand);
                        //---Eliminar Rubros---//

                        //---Insertar Rubros---//
                        sqlCommand.CommandText = "LOS_GDDES.SP_INSERTAR_RUBRO_X_PUBLIACION";
                        sqlCommand.CommandType = CommandType.StoredProcedure;
                        foreach (DataRowView rubro in clb_rubros.CheckedItems)
                        {
                            sqlCommand.Parameters.Clear();
                            sqlCommand.Parameters.AddWithValue("id_publicacion", publicacionOriginal.Field<Decimal>("ID_PUBLICACION"));
                            sqlCommand.Parameters.AddWithValue("id_rubro", rubro.Row.Field<Decimal>("ID_RUBRO"));
                            baseDeDatos.ejecuta(sqlCommand);
                        }
                        //---Insertar Rubros---//

                        MessageBox.Show("Publicación editada.");
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("No se puede generar la publicación. Alcanzó el máximo de publicaciones gratuitas.");
                    }
                }
                else
                {
                    MessageBox.Show("Debe seleccionar al menos un rubro.");
                }
            }
            else
            {
                MessageBox.Show("Faltan completar datos.");
            }
        }

        private int validar_publicaciones_gratuitas()
        {
            if (Convert.ToInt32(cmb_visibPublicacion.SelectedValue) == 1 && Convert.ToInt32(cmb_estadoPublicacion.SelectedValue) == 1)
            {
                BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.CommandText = "LOS_GDDES.SP_VALIDAR_PUBLICACIONES_GRATUITAS";
                sqlCommand.CommandType = CommandType.StoredProcedure;
                sqlCommand.Parameters.AddWithValue("@id_usuario", BaseDeDatos.Instance.idUsuario);
                sqlCommand.Parameters.AddWithValue("@id_rol", BaseDeDatos.Instance.idRol);
                int cantGratis = baseDeDatos.ejecuta(sqlCommand);

                if (cantGratis >= 3)
                    return 0;
                else
                    return 1;
            }

            return 1;
        }

        private void btn_cancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
